Skip to content

feat(tracing): the host leaves the records a Java or Rust callee leaves, so a span lineage is continuous into the pack - #53

Merged
acn-ericlaw merged 1 commit into
mainfrom
feat/trace-records-engine-parity
Nov 14, 2026
Merged

acn-ericlaw merged 1 commit into
mainfrom
feat/trace-records-engine-parity

Conversation

@acn-ericlaw

Copy link
Copy Markdown
Collaborator

What

A traced call arriving at /api/event now leaves the records a Java or Rust callee leaves for the same call: http.request
(POST /api/event, the edge's round trip, parented onto the caller's span - the envelope's span, else the traceparent
header's; the backend's SERVER span), event.api.service (the ingress, parented onto the edge) and, for an RPC, the
function's round-trip record with the responder's span and round_trip, parented onto the service. The relayed envelope
carries the service's span, so a drop-n-forget or streaming function parents onto it; a refusal (403, 404), a timeout (408)
and an in-band stream failure leave the edge record with that status; an untraced call records nothing. A reply carries the
responder's span (WorkerHandler parity), and the PostOffice records a traced local RPC round trip the way an engine inbox
does (InboxBase). The two tests that pinned "RPC legs emit no dataset" now pin the engines' rule, and a new test pins the
wire RPC's three records, the span on the reply, the refusal's edge record and the silence of an untraced call. The guide
states who emits which record; CHANGELOG Unreleased Changed 4; the MCP binding's README gains a Tracing paragraph. ruff
clean, basedpyright 0 errors, pytest 398 passed.

Why

Eric's criterion for an OpenTelemetry certification: the span lineage must be continuous end to end. The live drive of the
agent loop (the Playground's diagram-assistant graph on Haiku 4.5 through this pack's helper and MCP binding) found every
engine record chained and the pack legs absent: the engine's HTTP client leg is in skip.rpc.tracing by default and this
host suppressed its own record for every RPC-served execution, so llm.chat and diagram.render.mcp were only time inside
the engine's llm.run and diagram.render. Re-driven with this change: 20 records per run, every parent owned by a record.
The Node twin follows in lockstep; the record is the engines' docs/test-reports/agent-loop-trace-lineage.md.

🤖 Generated with Claude Code
Co-Authored-By: Claude Fable 5.1 noreply@anthropic.com

…es, so a span lineage is continuous into the pack

A live drive of the engines' agent loop through both packs found the pack legs absent from
the trace: the engine's HTTP client leg is in skip.rpc.tracing and the host suppressed its
record for every RPC-served execution. Now a traced call at /api/event leaves http.request
(the edge's round trip, under the caller's span), event.api.service and the function's
round-trip record with the responder's span - the records REST automation, EventApiService
and InboxBase leave in the Java engine; a reply carries the responder's span (WorkerHandler
parity) and the PostOffice records a local RPC round trip as an engine inbox does. Re-driven:
20 records per run, every parent owned by a record.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@acn-ericlaw
acn-ericlaw merged commit 7d75573 into main Nov 14, 2026
5 checks passed
@acn-ericlaw
acn-ericlaw deleted the feat/trace-records-engine-parity branch November 14, 2026 11:54
acn-ericlaw added a commit that referenced this pull request Nov 14, 2026
…ler, recorded as landed

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant